
package br.ucb.cesbdao.modeloTabelas;

/**
 * Síntese
 *    Atributos: atendentes e colunas
 *    Métodos: 
 *    		ModeloTabelaTrabalhador(), 
 *    		getTrabalhadors() , setTrabalhadors(ArrayList<Pessoa>), 
 *    		getColunas() , setColunas(String[]), 
 *    		getColumnName(int), 
 *    		getColumnCount(), 
 *    		getRowCount() e 
 *    		getValueAt(int, int).
 * 
 */

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import org.apache.log4j.Logger;

import br.ucb.cesbdao.beans.Trabalhador;
import br.ucb.cesbdao.enuns.EnumMensagens;
import br.ucb.cesbdao.servicos.DateUtil;
import br.ucb.cesbdao.servicos.Servicos;
import br.ucb.cesbdao.utilBeans.FrequenciaUtil;
import br.ucb.cesbdao.visao.Visao;

@SuppressWarnings("serial")
public class ModeloTabelaAtendenteApoio extends AbstractTableModel{
	static Logger logger = Servicos.carregaLog(ModeloTabelaAtendenteApoio.class);
//	private static final String opc[] = {"Presente e Atendendo","Presente e Não Atendendo","Não marcar nada"};
	private List<Trabalhador> atendentes  = null;
	private String []colunas = new String[] {"Nome","Atendendo"};
	private static HashMap<Integer, Boolean> atendendo = new HashMap<Integer, Boolean>();
	private static boolean flag = true;
	
	
	public boolean isFlag() {
		return flag;
	}
	public static void setFlag(boolean flags) {
		flag = flags;
	}
	public ModeloTabelaAtendenteApoio(){
		this.atendentes = new ArrayList<Trabalhador>();
	}
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		switch (columnIndex) {
		case 0:
			return String.class;
		case 1:
			return Boolean.class;
		case 2:
			return String.class;
		}
		return String.class;    	
	}
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		switch (columnIndex) {
		case 1:
			return true;
		}
		return false;

	}

	public List<Trabalhador> getTrabalhadors() {
		return atendentes;
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void setTrabalhadors(ArrayList<Trabalhador> atendentes) {
		this.atendentes = (List)atendentes;
		for (Trabalhador atendente : atendentes) {
			if(atendendo.get(atendente.getId()) == null || atendendo.get(atendente.getId()) == false){
				atendendo.put(atendente.getId(),false);
			}
			else
				atendendo.put(atendente.getId(),true);

		}
	}

	public String[] getColunas() {
		return colunas;
	}
	public void setColunas(String[] colunas) {
		this.colunas = colunas;
	}

	@Override
	public String getColumnName(int col){
		return colunas[col];
	}

	public int getColumnCount() {
		return getColunas().length;
	}

	public int getRowCount() {
		return getTrabalhadors().size();
	}
	public Trabalhador getTrabalhadorAt(int row){
		return atendentes.get(row);
	}
	public Boolean getAtendendoAt(){
		for (Trabalhador atendente : atendentes) {
			return atendendo.get(atendente.getId());
		}
		return false;

	}
	public int getQntAtendendoAt(){
		int i = 0;
		for (Trabalhador atendente : atendentes) {
			if(atendendo.get(atendente.getId()))
				i++;
		}
		return i;

	}
	public Object getValueAt(int rowIndex, int columnIndex) {
		Trabalhador atendente = (Trabalhador)atendentes.get(rowIndex);
		String data = FrequenciaUtil.getFrequencia(atendente);
		switch(columnIndex){
		case 0:
			return atendente.getNome();
		case 1:
			return atendendo.get(atendente.getId());
		case 2:
			if(!data.equalsIgnoreCase("Ausente"))
				return DateUtil.formatDateOut(data);
			return data;
		}
		return null;
	}
	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		if(isFlag()){
			if(FrequenciaUtil.getFrequencia(getTrabalhadorAt(rowIndex)).equalsIgnoreCase("Ausente")){
				if (Visao.showYesNo(EnumMensagens.MSG_Q_CONFIRMACAO_MARCAR_PRESENTE.getMensagem()+getTrabalhadorAt(rowIndex).getNome(),"Confirmação")) {	
					atendendo.put(getTrabalhadorAt(rowIndex).getId(), (Boolean)aValue);
					FrequenciaUtil.setFrequencia(atendendo.get(getTrabalhadorAt(rowIndex).getId()),getTrabalhadorAt(rowIndex));
				}
			}else{
				atendendo.put(getTrabalhadorAt(rowIndex).getId(), (Boolean)aValue);
			}
		}
	}
	public ArrayList<Trabalhador> getTrabalhadorsAtendendo() {
		ArrayList<Trabalhador> atendentes = new ArrayList<Trabalhador>();
		for (Trabalhador atendente : this.atendentes) {
			if(atendendo.get(atendente.getId()) == true)
				atendentes.add(atendente);
		}
		return atendentes;
	}



}
